package cn.com.yx.ms.service;


import cn.com.yx.ms.application.web.ApiQueryBase;
import cn.com.yx.ms.domain.TreeModel;
import cn.com.yx.ms.domain.dbmodel.ScFile;
import cn.com.yx.ms.domain.dbmodel.ScLive;
import cn.com.yx.ms.domain.dbmodel.SysRole;
import cn.com.yx.ms.domain.mq.MqPushProgramModel;
import cn.com.yx.ms.domain.program.*;
import cn.yx.framework.configuration.ApiCode;
import cn.yx.framework.view.ApiResult;

import javax.servlet.http.HttpServletRequest;
import java.util.List;

/**
 * 公告管理接口
 */
public interface IProgramService {

    //region << 素材目录 >>

    /**
     * 素材目录保存或更新操作方法
     *
     * @param scCatalogModel
     * @return
     */
    ApiResult saveScCatalog(CatalogModel scCatalogModel);

    /**
     * 新增素材目录
     *
     * @param scCatalogModel
     * @return
     */
    int insertScCatalog(CatalogModel scCatalogModel);

    /**
     * 删除素材目录
     *
     * @param id
     * @return
     */
    ApiResult deleteScCatalog(String id);


    /**
     * 修改素材目录
     *
     * @param scCatalogModel
     * @return
     */
    int updateScCatalog(CatalogModel scCatalogModel);

    /**
     * 查询素材目录
     *
     * @param apiQueryBase
     * @return
     */
    List<CatalogModel> findScCatalogs(ApiQueryBase apiQueryBase);

    /**
     * 获取单个素材对象
     *
     * @param id
     * @return
     */
    CatalogModel findScCatalog(String id);

    //endregion

    // region << 素材管理 >>

    /**
     * 素材保存或更新操作方法
     *
     * @param scFileModel
     * @return
     */
    ApiResult saveScFile(ScFileModel scFileModel);

    /**
     * 新增素材
     *
     * @param scFileModel
     * @return
     */
    int insertScFile(ScFileModel scFileModel);

    /**
     * 删除素材
     *
     * @param id
     * @return
     */
    int deleteScFile(String id);

    /**
     * 修改素材
     *
     * @param scFileModel
     * @return
     */
    int updateScFile(ScFileModel scFileModel);

    /**
     * 查询素材
     *
     * @param apiQueryBase
     * @return
     */
    List<ScFile> findScFiles(ApiQueryBase apiQueryBase);

    /**
     * 获取单个素材对象
     *
     * @param id
     * @return
     */
    ScFileModel findScFile(String id);

    /**
     * 根据md5获取文件数
     *
     * @param md5
     * @return
     */
    int selectCountByMd5(String md5);

    int saveFiles(String folderid, List<UploadFileModel> uploadFileModels, HttpServletRequest request);

    List<TreeModel> findCatalogFileTree();

    /**
     * 公告目录树获取
     *
     * @return
     */
    List<TreeModel> findGgFileTree();
    // endregion

    // region << 节目管理 >>

    /**
     * 保存节目
     *
     * @param programModel
     * @return
     */
    ApiCode saveProgram(ProgramModel programModel);

    /**
     * 新增节目
     *
     * @param programModel
     * @return
     */
    int insertProgram(ProgramModel programModel);

    /**
     * 删除节目
     *
     * @param id
     * @return
     */
    int deleteProgram(String id);

    /**
     * 修改节目
     *
     * @param programModel
     * @return
     */
    int updateProgram(ProgramModel programModel);

    /**
     * 获取节目清单
     *
     * @param apiQueryBase
     * @return
     */
    List<ProgramModel> findPrograms(ApiQueryBase apiQueryBase);

    /**
     * 获取单个节目
     *
     * @param id
     * @return
     */
    ApiResult findProgram(String id);

    /**
     * 保存设备节目关系
     *
     * @param mqPushProgramModel
     */
    void saveDevProgramMap(MqPushProgramModel mqPushProgramModel);

    List<ProgramFileModel> findProgramFiles(String programid);

    // endregion

    // region << 直播流管理 >>

    /**
     * 角色保存或更新操作方法
     *
     * @param sysRole
     * @return
     */
    ApiCode saveLive(ScLive scLive);

    /**
     * 创建角色
     *
     * @param sysRole
     * @return
     */
    int insertLive(ScLive scLive);

    /**
     * 删除角色
     *
     * @param id
     * @return
     */
    ApiCode deleteLive(String id);

    /**
     * 修改角色
     *
     * @param sysRole
     * @return
     */
    int updateLive(ScLive scLive);

    /**
     * 获取角色列表
     *
     * @param apiQueryBase
     * @return
     */
    List<ScLive> findLives(ApiQueryBase apiQueryBase);

    /**
     * 获取单个角色对象
     *
     * @param id
     * @return
     */
    ScLive findOneLive(String id);

    // endregion
}